<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">

	<script type="text/javascript">
     /**
      * 面向对象 java javaScript c++ 

        面向过程  c语言

        面向对象编程

        // document.write(this);//BOM浏览器对象模型

              var box2 = {
      	  age:12,
      	  name:'小红',
      	  sex:'女',
      	  run:function(){
      	  	document.write("名字"+this.name+"年龄"+this.age);
      	  }
      };

      box.run();
      box2.run();
       1.很多重复声明 .
       2.无法进行判别,属于那个类别
      */
/*     
      var box = new Object();//通过new 关键字创建一个对象
          box.age = 12;
          box.name = 'xiaohei';
          box.sex = '男';
          box.run = function(){
          	 document.write("名字"+this.name+"年龄"+this.age);
          };

      var box2 = new Object();//通过new 关键字创建一个对象
          box2.age = 14;
          box2.name = 'xiao11';
          box2.sex = '男';
          box2.run = function(){
          	 document.write("名字"+this.name+"年龄"+this.age);
          };

       var goods = new Object();//通过new 关键字创建一个对象
          goods.price = 12;
          goods.number = 10;
          goods.bandr = '红富士';



document.write(goods instanceof Object==box2 instanceof Object);*/

  /**
   * 工厂模式创建对象
   */
/*   function creatObject(name,age,sex){
        var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.sex = sex;
            obj.run = function(){
                alert(this.name);
            };
          return obj;
   }//把重复声明给解决了

      function creatGoods(price,name,number){
        var obj = new Object();
            obj.price = price;
            obj.name = name;
            obj.number = number;
            obj.run = function(){
                alert(this.name);
            };
          return obj;
   }

   var box1 = creatObject("小黑",18,'男');
   var box2 = creatGoods(18,'苹果',10);


   document.write(box2 instanceof Object);
   //还是无法判别他们的类别*/

   /**
    * 构造函数名字首字需要大
    */
   /*function  User(name,sex,age){
         
         this.name = name;
         this.sex = sex;
         this.age = age;

   }

   function  Goods(name,price,number){
         
         this.name = name;
         this.price = price;
         this.number = number;
      
   }
*/
  
 
  // var arr = new Array(5);
  //在用new Array() 创建数组,构造函数里只要一个参数时,代表声明的是它的长度。
  //length属性获取长度，不止可读,还能设置值.
  //var arr2 = [1,5,8,6,10];//在<IE9浏览器是会把识别为一个元素
  //arr.length= 100;
   //;//语法错误
   /**
    *   var arr = new Array(10);//代表数组长度为10
        var arr2  = [10];//代表一个值


        document.write(arr.length+",");
        document.write(arr2.length);


       var arr = [1,"sds",true,new Object(),10];
       //数组没有类型限制,同一个数组可以放任意类型。
       //我们自己使用通常会进行分类
       //数组会自动扩容
       //数组也可以称为集合(可变数组)
    */
   


        
        var arr = [5,4,3,2,1];//找出最大值

       /**
        * [shot 数组排序从小到大]
        * @param  {[type]} arr [description]
        * @return {[type]}     [description]
        */
       function shot(arr) {
        //冒泡排序
        for (var i = 1; i < arr.length; i++) {
        	    
        	    for (var j = 0; j < arr.length-i; j++) {
        	    	 
        	    	 if (arr[j]>arr[j+1]) {
                            
                            var temp = arr[j];

                            arr[j] = arr[j+1];

                            arr[j+1] = temp;
        	    	 }
        	    }
        }
}

        /**
        * [getMax 获取数组最大值]
        * @param  {[type]} arr [description]
        * @return {[type]}     [description]
        */  
  function getMax(arr){

       var max = arr[0];

       for(var i = 1;i<arr.length;i++){

       	    if (max<arr[i]) {

                max =  arr[i];
       	    }

       }
        return max;

  }
  /**
   * [getMin 获取数组最小值]
   * @param  {[type]} arr [description]
   * @return {[type]}     [description]
   */
  function getMin(arr){
    
       var min = arr[0];

       for(var i = 1;i<arr.length;i++){

       	    if (min>arr[i]) {

                min =  arr[i];
       	    }

       }
       return min;
  }

  /*
      shot(box);

    document.write(getMin(box)+"<br/>");
    document.write(getMax(box));
   */

/**
 *  document.write(box.toString()+"<br/>");
    document.write(box.valueOf()+"<br/>");
    document.write(box.toLocaleString());
 */

/*    document.write(box.join('_'));//不会对原数组进行修改

    console.log(box);*/

/*
 * 数组方法Array
 * 栈方法
 * push()向原数组末尾添加任意个数元素
 *       返回值为添加之后的数组长度 
 * pop() 移出数组末尾最后一个元素,并修改了length长度 
 *       返回被移除的元素值  
 * 队列方法
 *   
 * shift()移除数组开头元素
 *        并返回移除的元素  
 * unshift()向原数组前端添加多个元素
 *         返回添加元素后,数组的长度
 * reverse() 将数组元素反序(逆序)
 *           返回修改后的,数组形式的字符串
 * sort() 没参数时按照 ASCII 字符顺序进行升序排列
 *        参数为一个函数(具体细节参考手册)
 *        返回修改后的,数组形式的字符串
 *        
   function dome(a,b){
            
       return b-a;
   }

   操作方法
   concat() //将一个或多个数组合并
              并且返回合并后的新数组,不改变原数组。

 * slice  //一个参数时,从当前下标开始截取直到末尾.返回截取的一段
 *        //两个参数时,从当前下标开始截取到第二个参数为止
 *          (不包括第二个参数的元素)前包后不包
 *
 * splice //1.删除功能
          //两个参数 第一个是删除的位置,第二个是删除的数量
          //返回被删除的元素。
          //2.插入功能 
          //第一个参数控制插入的位置,
          //第二个参数必须设置为零(保证不移出元素)
          //之后可由一个或多个参数组成的插入项目
          //3.替换功能
          //第一个参数控制替换的位置
          //第二个参数控制替换的个数
          //之和的替换的参数个数与第二个参数的值保持一致
                          
 */
  /**
   * Math.floor()向下取整
   * Math.random()产生0 - 1之间的随机数
   *//*   随机参数 10-15名学生,id按顺序来  年龄随机 成绩随机 性别随机
   
    学生管理系统
    1.查看所有学生
    2.按年龄排序  从小到大
    3.按成绩排序  从大到小*/
 
   function  Students(id,name,sex,age,score){
            this.id = id;
            this.name =name;
            this.sex = sex;
            this.age = age;
            this.score = score;
            this.input = function(){//学生信息输出方法
            return 'id='+this.id+",name="+this.name+",sex="+this.sex+",age="+this.age+',score='+this.score+"\n";
            }
   }
    
    //学生集合
    var stuList = new Array();
    //生产学生
    for (var i = 0; i < 10; i++) {
          var id = i+1;
          var name = "stu"+(i+1);
          var sex = "";
          if(Math.floor(Math.random()*2)>0){
                  sex = '男';
          }else{
          	      sex = '女';
          }
         // var sex = Math.floor(Math.random()*2)>0? '男':'女';
          var age = 18 + Math.floor(Math.random()*8);
          var score = Math.floor(Math.random()*101);
          var stu = new Students(id,name,sex,age,score);
          stuList.push(stu);
    }
    /**
     * 主界面
     * @return {[type]} [description]
     */
    function home(){

        var key = prompt('学生管理系统！\n1.查看所有学生\n2.按年龄排序\n3.按成绩排序');
          switch(key){
            case '1':
            seeStudent();
            break;
            case '2': 
            //注册  
            ageSort();
            break;
            case '3':
            
            break;
            scoreSort();
            case '4':
            //通过return退出整个程序
            return;

            default:
            alert("亲,输入有误!");
          }
          home();//递归

    }


   /**
    * 查看学生信息
    * @return {[type]} [description]
    */
    function seeStudent(){

        var str = "";

        for (var i = 0; i <stuList.length; i++) {	

            str +=	stuList[i].input();

        }
        //弹出学生信息
        alert(str);        
    }



   function ageSort(){
 //冒泡排序
        for (var i = 1; i < stuList.length; i++) {
        	    
        	    for (var j = 0; j < stuList.length-i; j++) {
        	    	 
        	    	 if (stuList[j].age>stuList[j+1].age) {
                            
                            var temp = stuList[j];

                            stuList[j] = stuList[j+1];

                            stuList[j+1] = temp;
        	    	 }
        	    }
        }

        seeStudent();

   }




 

home();













        
   /**
    * 登录注册 多用户版本。创建构造函数 User  用户对象具有如下属性. 
    *                       有account(账号)password(密码)name(用户名)sex(性别) 
    *                       和input输出方法(输出个人信息!)
    *
    *                       ps:同一个账号,不能重复注册。
    * 魔形管理系统                       
    *   1.登录
    *   2.注册
    *   3.退出
    *
    * 登录成功后 
    *
    *个人管理界面 
    *    1.查看个人信息。
    *    2.修改用户名。
    *    3.退出。
    *
    *  
    * 
    */






   

   

         



       








     





        

	</script>
</head>
<body>

</body>
</html>